package com.lihepeng.leecode.tree;

/**
 * 数组的深度
 * 采用二叉树遍历的方案实现
 *
 */
public class Solution104 {
    int res =0;
    // 两种思路 第一个思路是时刻维护最大深度和当前节点所在的深度
    int depth = 0;
    // 主函数
    public int maxDepth(TreeNode root) {
        traverse(root);
        return res;
    }

    /**
     * 使用后续变的方式 进行求解
     * 2022年1月25日
     * @param root
     * @return
     */
    public int maxDepth01(TreeNode root) {
        if (root ==null) {
            return 0;
            
        }
        int left = maxDepth01(root.left)+1;
        int right = maxDepth01(root.right)+1;
        return Math.max(left,right)+1;
    }

    private void traverse(TreeNode root) {
        if (root ==null){
            // 到达叶子节点
            res = Math.max(depth,res);
            return;
        }
        // 前序位置
        depth++;
        traverse(root.left);
        traverse(root.right);
        // 后序位置
        depth--;

    }
}
